// Description  :
// Author       : MMingzhao
// Date         : 2020-01-15 16:27

// Package model
package model

import (
	"fmt"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/postgres"
	log "github.com/sirupsen/logrus"
	"go-admin-template/config"
)

//var db *gorm.DB

func Init() *gorm.DB {

	info := config.Info

	conf := fmt.Sprintf("host=%s port=%s user=%s dbname=%s password=%s sslmode=disable",
		info.Db.Addr, info.Db.Port, info.Db.User, info.Db.Name, info.Db.Password)

	dbConn, err := gorm.Open(info.Db.Type, conf)
	if err != nil {
		log.Warn(err)
		log.WithField("dataSource name ", info.Db.Name).Fatal("Database connection failed")
	}

	//设置全局表名禁用复数
	dbConn.SingularTable(true)
	// 用于设置gorm的日志
	dbConn.LogMode(info.Db.Log)
	// 用于设置最大打开的连接数，默认值为0表示不限制.设置最大的连接数，可以避免并发太高导致连接mysql出现too many connections的错误。
	dbConn.DB().SetMaxOpenConns(5)
	// 用于设置闲置的连接数.设置闲置的连接数则当开启的一个连接使用完成后可以放在池里等候下一次使用。
	dbConn.DB().SetMaxIdleConns(0)

	gorm.DefaultTableNameHandler = func(db *gorm.DB, defaultTableName string) string {
		return config.Info.Db.Prefix + defaultTableName
	}

	//db = dbConn
	InitTable(dbConn)

	return dbConn
}

func InitTable(db *gorm.DB) {
	UserTable(db)
}
